﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CadCD
{
    // Classe Cd
    class CD
    {
        private static int COUNT = 0;
        const int ARTISTA = 1;
        const int TITULO = 2;

        public int id;
        private string titulo;
        private string artista;
        private int ano;
        private string categoria;

        private List<Musica> tracks = new List<Musica>();

        private static string[] categoryList = {
                                         "Jazz"
                                        , "Rock"
                                        , "Clássica"
                                        , "Blues"
                                        , "Sertaneja"
                                        , "Rap"
                                        , "Pop"
                                        , "Funk"
                                    };

        public CD()
        {
            this.id = ++COUNT;
        }

        public CD(int id)
        {
            if (id > COUNT)
            {
                this.id = id;
                COUNT = id;
            }
            else
            {
                this.id = COUNT++;
            }
        }

        public CD(string artita_ou_titulo, int tipo)
        {
            switch(tipo){
                case ARTISTA:
                    if (!this.setArtista(artita_ou_titulo))
                    {
                        throw new Exception("ERRO: Informe corretamente o nome do artista.");
                    }

                    COUNT++;
                    break;
                case TITULO:
                    if(!this.setTitulo(artita_ou_titulo)){
                        throw new Exception("ERRO: Informe corretamente o titulo do CD");
                    }

                    COUNT++;
                    break;
                default:
                    throw new Exception("ERRO: O os parametros informados estão errados");
            }
        }

        public bool setTitulo(string titulo)
        {
            if (titulo.Trim().Length <= 2)
            {
                throw new Exception("ERRO: Informe o titulo corretamente");
            }
            else
            {
                this.titulo = titulo;
                return true;
            }
        }

        public bool setArtista(string artista)
        {
            if (artista.Trim().Length >= 1 && artista.Trim().Length <= 80)
            {
                this.artista = artista;
                return true;
            }
            else
            {
                throw new Exception("ERRO: Informe o Artista corretamente");
            }
        }

        public bool setAno(int ano)
        {
            if (ano >= 1900 && ano <= 2500)
            {
                this.ano = ano;
                return true;
            }
            else
            {
                throw new Exception("ERRO: Informe o ano corretamente.");
            }
        }

        public bool setCategoria(string categoria)
        {
            if (String.IsNullOrEmpty(categoria))
            {
                throw new Exception("Erro: Selecione uma opção válida");
            }

            Array.Sort(categoryList);
                        
            if (Array.BinarySearch(categoryList, categoria) >= 0)
            {
                this.categoria = categoria;
                return true;
            }
            else
            {
                throw new Exception("Erro: Selecione uma opção válida");
            }
        }

        public int getId()
        {
            return this.id;
        }

        public string getTitulo()
        {
            return this.titulo;
        }

        public string getArtista()
        {
            return this.artista;
        }

        public int getAno()
        {
            return this.ano;
        }

        public string getCategoria()
        {
            return this.categoria;
        }

        public static string[] getCategoryList()
        {
            return categoryList;
        }

        public override string ToString()
        {
            string aux = "";

            aux += String.Format("ID.........{0}\n", this.getId());
            aux += String.Format("Titulo.....{0}\n", this.getTitulo());
            aux += String.Format("Artista....{0}\n", this.getArtista());
            aux += String.Format("Ano........{0}\n", this.getAno());
            aux += String.Format("Estilo.....{0}\n", this.getCategoria());

            return aux;
        }
    }
}